package com.quanyan.stadium.service.gameRules;

import com.quanyan.stadium.entity.TbGameRound;
import com.quanyan.stadium.entity.TbGameRoundScore;
import com.quanyan.stadium.entity.vo.GameGroup;

import java.util.List;

/**
 * Created by xiao.lai on 16/5/26.
 *
 * 赛制具体的算法存放点
 */
public interface GameSystemService {

    /**
     * @param teamIds 队伍id集合
     * @param tbGameRound 当前轮次的对象
     * @param isFirstRound 是否是第一轮
     *
     *
     * @return 返回编排好的对战对象集合
     * */
    List<GameGroup> washedGroup(List<Integer> teamIds, TbGameRound tbGameRound, boolean isFirstRound);

    /**
     * @param teamIds 队伍id集合
     * @param tbGameRoundList 所有轮次对象集合
     * @param group 第几组(混合赛存在分组情况, 其他赛制组默认都是0)
     * @param teamType 队伍类型 0 个人 1俱乐部
     *
     *
     * @return 返回编排好的对战对象集合
     **/
    List<GameGroup> circleGroup(List<Integer> teamIds, List<TbGameRound> tbGameRoundList, int group, Integer teamType);

    /**
     * 等位赛(第一轮逻辑的处理)  ---戴维斯
     *
     *
     *
     * */
    @Deprecated
    List<GameGroup> swissGroup(List<Integer> teamIds, TbGameRound tbGameRound, boolean isFirstRound);

    /**
     * 等位赛(非第一轮逻辑的处理)
     *
     * */
    @Deprecated
    List<GameGroup> swissGroupNotFirst(TbGameRound tbGameRound, List<TbGameRoundScore> tbGameRoundScores, Integer preGameRoundId);


    /**
     * 等位赛制算法 (博士)
     *
     * @param teamIds 队伍id集合
     * @param tbGameRound  当前轮次的对象
     * @param preGameRoundId 上一轮轮次id(上一轮不存在的话,默认为0)
     * @param isFirst 是否是第一轮
     *
     *
     * @return 返回编排好的对战对象集合
     * */

    List<GameGroup> swissGroupNew(List<Integer> teamIds, TbGameRound tbGameRound, Integer preGameRoundId, boolean isFirst);
}
